<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 异步任务 有分为 宏任务和微任务
    // 宏任务  setTimeout/setInterval  setImmediate 
    // 微任务  Promise.then .finally  .catch   process.nextTick MutaionObserver

//   同步任务 -  微任务  - 宏任务

// 1.先执行所有的同步任务，碰到异步任务放到任务队列里排队
// 2.同步任务执行完，开始执行所有的异步任务
// 3.先执行任务队列里所有的微任务
// 4.开始下一个宏任务
// 5.然后再执行所有的微任务
// 6.在执行下一个宏任务  
// 这样就形成了一个时间循环

// 规则 ：异步的任务队列里，同等条件下，一定先执行微任务

// 宏任务由浏览器发起的
// 微任务是由js发起的


console.log(1)//同步
setTimeout(()=>{ //异步
console.log(2)
}, 0) 
new Promise((resolve, reject)=>{  //同步
console.log('new Promise')
resolve()
}).then(()=>{        //.then是异步  又是异步中的微任务
console.log('then')
})
console.log(3)   //同步


//  1 new Promise 3 then 2
</script>
</html>